
package Cliente;


import interfaz.VentanaPrincipal;
import interfaz.VentanaSeleccionColor;
import interfaz.VentanaSeleccionColorCliente;
import java.net.*;
import java.lang.*;
import java.io.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import principal.Cliente;

public class ThreadCliente extends Thread
{
   private DataInputStream entrada;
   private VentanaPrincipal ventana;
   private VentanaSeleccionColor vsc;
   private VentanaSeleccionColorCliente vscc;
   private Cliente cliente;
   private boolean primeraVez=true;

   public ThreadCliente (Cliente cli, DataInputStream entrada, VentanaPrincipal vp) throws IOException
   {
      this.entrada=entrada;
      this.ventana = vp;
      this.cliente=cli;
      vsc = null;
      vscc = null;
   }
   public void run()
   {
      String menser="",amigo="";
      int opcion=0;
      while(true)
      {         
         try{
            opcion=entrada.readInt();
            switch(opcion)
            {
               case 1://mensaje enviado
                  menser=entrada.readUTF();
                  System.out.println("ECO del servidor:"+menser);
                  ventana.actualizarChat(menser);
                  break;
               case 2://se agrega
                  menser=entrada.readUTF();
                  ventana.actualizarChat(menser);
                  break;
               case 3://mensaje de amigo
                  amigo=entrada.readUTF();
                  menser=entrada.readUTF();
//                  vcli.mensageAmigo(amigo,menser);
                  System.out.println("ECO del servidor:"+menser);
                  break;
               case 4://actualizar colores
                   int tamaño = entrada.readInt()*2;
                   String[] nombresColores = new String[tamaño];
                   for(int i = 0; i < tamaño; i++){
                       nombresColores[i] = entrada.readUTF();
                   }
                   if(ventana.getVsc() == null){
                       vscc = ventana.getVscc();
                       vscc.comprobarColores();
                   }else{
                        vsc = ventana.getVsc();
                        vsc.comprobarColores();
                   }
                   break;
               case 5:  //comezar partida
                   if(vscc != null){
                       vscc.comenzarPartida();
                   }
                   break;

                   
               case 6:// asignar paises
                   if(primeraVez)
                   {
                       primeraVez=false;
                       cliente.crearMundo();
                   }
                   String color = entrada.readUTF();
                   String pais = entrada.readUTF();

                   cliente.actualizarPais(color, pais, 1);
                   break;

                case 7:// modificar turnos
                    int cantJug = entrada.readInt();
                    String[] nombresJugadores = new String[cantJug];
                    String[] coloresJugadores = new String[cantJug];
                    for (int i = 0; i < cantJug; i++) {
                        nombresJugadores[i] = entrada.readUTF();
                        coloresJugadores[i] = entrada.readUTF();
                    }
                    cliente.modificarTurnos(nombresJugadores, coloresJugadores);
                    break;
                case 8:// asignar misiones
 
                    String desc = entrada.readUTF();
                    int norteAmerica=entrada.readInt();
                    int sudAmerica=entrada.readInt();
                    int europa=entrada.readInt();
                    int asia=entrada.readInt();
                    int africa=entrada.readInt();
                    int oceania=entrada.readInt();
          
                   
                    cliente.crearMision(desc, norteAmerica, sudAmerica, europa, asia, africa, oceania);
                    break;
                case 9:// actualizar label
                    String paiss = entrada.readUTF();
                    String direccion = entrada.readUTF();
                    int ejercito = entrada.readInt();
                    cliente.actualizarLabel(paiss, direccion, ejercito);
                    break;
                case 10: //setear turno
                    int proxTurno = entrada.readInt();
                    ventana.setearTurno(proxTurno);
                    break;
                case 11: //actualizar ataque
                    String pais1 = entrada.readUTF();
                    String color1 = entrada.readUTF();
                    int ejercito1 = entrada.readInt();
                    String pais2 = entrada.readUTF();
                    String color2 = entrada.readUTF();
                    int ejercito2 = entrada.readInt();
                    cliente.actualizarAtaque(pais1, color1, ejercito1, pais2, color2, ejercito2);
                    break;
                case 12: //actualizar dados oponente
                    int tam = entrada.readInt();
                    int[] dadosOrigen = new int[tam];
                    for (int i = 0; i < dadosOrigen.length; i++) {
                       dadosOrigen[i] = entrada.readInt();
                    }
                    tam = entrada.readInt();
                    int[] dadosDestino = new int[tam];
                    for (int i = 0; i < dadosDestino.length; i++) {
                       dadosDestino[i] = entrada.readInt();
                    }
                    cliente.actualizarDadosOponente(dadosOrigen, dadosDestino);
                    break;
                case 13:
                    if(cliente.verificarMision()){
                        JOptionPane.showMessageDialog(null, "¡¡¡¡GANASTE!!!!");
                        cliente.avisarQueGane();
                    }
                    break;
                case 14:
                    String nom=entrada.readUTF();
                    String obj= entrada.readUTF();
                    cliente.avisarVictoria(nom, obj);
            }
         }
         catch (IOException e){
            System.out.println("Error en la comunicaci�n "+"Informaci�n para el usuario");
            break;
         }
      }
      System.out.println("se desconecto el servidor");
   }

   
}